#include "ClientSideParser.h"

ClientSideParser::ClientSideParser(JuegoClientImp* juego): xmlpp::SaxParser()
{
	this->juego = juego;
}

ClientSideParser::~ClientSideParser()
{
}

void ClientSideParser::on_start_element(const Glib::ustring& name,
                                   const AttributeList& attributes)
{
	if (name.compare("territorio") == 0) {
		updateTerritorio(attributes);
	}
	if (name.compare("jugador") == 0) {
		updateTerritorio(attributes);
	}
	if (name.compare("dado") == 0) {
		updateTerritorio(attributes);
	}
	if (name.compare("turno") == 0) {
		updateTurno(attributes);
	}
	else if (name.compare("informeAccion") == 0) {
		//
	}
	else if (name.compare("solicitud") == 0) {
		//
	}
	else if (name.compare("excepcion") == 0) {
		//
	}
}

void ClientSideParser::updateJugador(const AttributesList& attributes) {
	string color = "";
	int cantidadEjercitos = 0;
	for(xmlpp::SaxParser::AttributeList::const_iterator iter = attributes.begin(); iter != attributes.end(); ++iter)
		if (iter->name.compare("color") == 0)
			color = iter->value;
		else if (iter->name.compare("ejercitos") == 0)
			cantidadEjercitos = atoi(iter->value.data());
	this->juego->getJugador(color)->asignarEjercitos(cantidadEjercitos);
}

void ClientSideParser::updateTerritorio(const AttributesList& attributes) {
	string nombre = "";
	string colorJugador = "";
	int cantidadEjercitos = 0;
	for(xmlpp::SaxParser::AttributeList::const_iterator iter = attributes.begin(); iter != attributes.end(); ++iter)
		if (iter->name.compare("nombre") == 0)
			color = iter->value;
		else if (iter->name.compare("ejercitos") == 0)
			cantidadEjercitos = atoi(iter->value.data());
		else if (iter->name.compare("colorJugador") == 0)
			colorJugador = iter->value;
	this->juego->getMapa()->obtenerTerritoio(nombre)->setEjercitos(cantidadEjercitos);
	this->juego->getMapa()->obtenerTerritoio(nombre)->setJugador(colorJugador);
}

void ClientSideParser::updateTurno(const AttributesList& attributes) {
	string colorJugador = "";
	for(xmlpp::SaxParser::AttributeList::const_iterator iter = attributes.begin(); iter != attributes.end(); ++iter)
		if (iter->name.compare("color") == 0)
			color = iter->value;
		else if (iter->name.compare("ejercitos") == 0)
			ejercitos = atoi(iter->value.data());
	this->juego->setTurno(colorJugador);
}

void ClientSideParser::updateDado(const AttributesList& attributes) {
	string id = "";
	int valor;
	bool atacante = false;
	for(xmlpp::SaxParser::AttributeList::const_iterator iter = attributes.begin(); iter != attributes.end(); ++iter)
		if (iter->name.compare("id") == 0)
			color = iter->value;
		else if (iter->name.compare("valor") == 0)
			valor = atoi(iter->value.data());
	this->juego->updateDado(id,valor);
}

void ClientSideParser::on_end_element(const Glib::ustring& name)
{
}

void ClientSideParser::on_characters(const Glib::ustring& text)
{
}

void ClientSideParser::on_comment(const Glib::ustring& text)
{
}

void ClientSideParser::on_warning(const Glib::ustring& text)
{
  std::cout << "on_warning(): " << text << std::endl;
}

void ClientSideParser::on_error(const Glib::ustring& text)
{
  std::cout << "on_error(): " << text << std::endl;
}

void ClientSideParser::on_fatal_error(const Glib::ustring& text)
{
  std::cout << "on_fatal_error(): " << text << std::endl;
}